package com.ruoyi.product.service.impl;

import java.util.List;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.product.es.ProductEs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.IndexOperations;
import org.springframework.data.elasticsearch.core.document.Document;
import org.springframework.stereotype.Service;
import com.ruoyi.product.mapper.TProdMapper;
import com.ruoyi.product.domain.TProd;
import com.ruoyi.product.service.ITProdService;

/**
 * 商品列表Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-08-05
 */
@Service
public class TProdServiceImpl implements ITProdService 
{
    @Autowired
    private TProdMapper tProdMapper;

    @Autowired
    ElasticsearchRestTemplate elasticsearchRestTemplate;

    /**
     * 查询商品列表
     * 
     * @param prodId 商品列表主键
     * @return 商品列表
     */
    @Override
    public TProd selectTProdByProdId(Integer prodId)
    {
        return tProdMapper.selectTProdByProdId(prodId);
    }

    /**
     * 查询商品列表列表
     * 
     * @param tProd 商品列表
     * @return 商品列表
     */
    @Override
    public List<TProd> selectTProdList(TProd tProd)
    {
        return tProdMapper.selectTProdList(tProd);
    }

    /**
     * 新增商品列表
     * 
     * @param tProd 商品列表
     * @return 结果
     */
    @Override
    public int insertTProd(TProd tProd)
    {
        tProd.setCreateTime(DateUtils.getNowDate());
        return tProdMapper.insertTProd(tProd);
    }

    /**
     * 修改商品列表
     * 
     * @param tProd 商品列表
     * @return 结果
     */
    @Override
    public int updateTProd(TProd tProd)
    {
        return tProdMapper.updateTProd(tProd);
    }

    /**
     * 批量删除商品列表
     * 
     * @param prodIds 需要删除的商品列表主键
     * @return 结果
     */
    @Override
    public int deleteTProdByProdIds(Integer[] prodIds)
    {
        return tProdMapper.deleteTProdByProdIds(prodIds);
    }

    /**
     * 删除商品列表信息
     * 
     * @param prodId 商品列表主键
     * @return 结果
     */
    @Override
    public int deleteTProdByProdId(Integer prodId)
    {
        return tProdMapper.deleteTProdByProdId(prodId);
    }

    /**
    * @param :
    * @return AjaxResult
    * @author :陈彤彤
    * @description 创建商品索引
    * @date 2025/8/7 20:22
    */
    @Override
    public AjaxResult createProductIndex() {
        IndexOperations indexOps = elasticsearchRestTemplate.indexOps(ProductEs.class);
        boolean exists = indexOps.exists();
        if (!exists){
            //创建索引
            indexOps.create();
            //创建索引映射
            Document mapping = indexOps.createMapping();
            indexOps.putMapping(mapping);
        }

        return AjaxResult.success("索引创建成功");
    }

    /**
    * @param :
    * @return AjaxResult
    * @author :陈彤彤
    * @description 同步到es
    * @date 2025/8/7 20:28
    */
    @Override
    public AjaxResult productListEs() {
        /*获取所有商品*/
        List<TProd> tProds = tProdMapper.selectTProdList(new TProd());
        /*把所有商品存入redis中*/
        for (TProd tProd : tProds) {
            ProductEs productEs = BeanUtil.toBean(tProd, ProductEs.class);
            elasticsearchRestTemplate.save(productEs);
        }
        return AjaxResult.success("同步成功");
    }
}
